﻿#include <iostream>
#include <vector>
#include <stack>
#include <queue>
#include <unordered_map>
#include <algorithm>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;
typedef pair<int, int> PII;
typedef long long LL;


////11
//
//const int N = 1e5 + 10, T = 3600 * 24;
//int n;
//int hh, mm, ss;
//char ch;
//PII be[N];
//int en[N];
//int mou[N];
//int diff[T];
////
////bool cmp(PII p1, PII p2)
////{
////	if (p1.first == p2.first)
////	{
////		return p1.second < p2.second;
////	}
////	return p1.first < p2.first;
////}
////
////struct CMP
////{
////	bool operator()(PII p1, PII p2)
////	{
////		return p1.first > p2.first;
////	}
////};
////
//int main()
//{
//	cin >> n;
//	int begin, end;
//	for (int i = 1; i <= n; ++i)
//	{
//		cin >> hh >> ch >> mm >> ch >> ss;
//		begin = hh * 3600 + mm * 60 + ss;
//		cin >> hh >> ch >> mm >> ch >> ss;
//		end = hh * 3600 + mm * 60 + ss;
//
//		//差分数组处理
//		diff[begin]++, diff[end+1]--;
//	}
//
//	//对差分数组做前缀和
//	for (int i = 1; i < T; ++i)
//		diff[i] += diff[i - 1];
//
//	int ret = 0;
//	for (int i = 0; i < T; ++i)
//	{
//		ret = max(ret, diff[i]);
//	}
//	cout << ret << endl;
//
//
//	return 0;
//}
// 
// 
// 
//int main()
//{
//	cin >> n;
//	for (int i = 1; i <= n; ++i)
//	{
//		cin >> hh >> ch >> mm >> ch >> ss;
//		be[i].first = hh * 3600 + mm * 60 + ss;
//		cin >> hh >> ch >> mm >> ch >> ss;
//		be[i].second = hh * 3600 + mm * 60 + ss;
//	}
//
//
//	sort(be + 1, be + 1 + n);
//	//		for(int i=1 ;i <= n ; ++i)
//	//	{
//	//		cout<< be[i].first<<"    "<<be[i].second<<endl;
//	//	}
//	int cnt = 1;
//	priority_queue<PII, vector<PII>, CMP> heap;//��С 
//	heap.push({ be[1].second,1 });
//
//
//	for (int i = 2; i <= n; ++i)
//	{
//		PII p = heap.top();
//		int bee = p.first;
//		int beibe = be[i].first;
//		if (be[i].first > bee)
//		{
//			heap.push({ be[i].second,0 });
//		}
//		else
//		{
//			cnt++;
//			heap.push({ be[i].second,0 });
//			heap.push(p);
//		}
//
//	}
//
//	cout << cnt << endl;
//
//
//	return 0;
//}

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
//14
// 
const int NM = 1e6 + 10;


int dx[] = { -1,-1,0,1,1,1,0,-1 };
int dy[] = { 0,1,1,1,0,-1,-1,-1 };

int aa[NM];
int n, m;

int n_, m_;

vector<int> d;
int st[NM * 4];


void bfs(int i, int j)
{
	n_ = 2 * n - 1, m_ = 2 * m - 1;
	queue<PII> q;
	q.push({ i,j });
	int ij = i * m_ + j;
	memset(st, 0, sizeof(st));
	int sum = 0;
	st[ij] = 1;

	while (q.size())
	{
		PII t = q.front();
		q.pop();
		int x = t.first, y = t.second;
		int xy = x * m_ + y;
		for (int k = 0; k < 8; ++k)
		{
			int a = x + dx[k], b = y + dy[k];
			int ab = a * m_ + b;
			if (a == 0 && b == 4)
			{
				int k = 0;
			}
			if (a < 0 || a > n_ || b < 0 || b > m_)continue;
			if (st[ab])continue;
			d[ab] = d[xy] + 1;
			st[ab] = 1;
			q.push({ a,b });
		}

	}

	for (int i = 0; i < 2 * n - 1; ++i)
	{
		for (int j = 0; j < 2 * m - 1; ++j)
		{
			int xy = i * m_ + j;
			cout << d[xy] << ' ';
		}
		cout << endl;
	}
}

int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; ++i)
		for (int j = 1; j <= m; ++j)
		{
			int xy = i * m + j+1;
			cin >> aa[xy];
		}

	d.resize(NM*4);
	//预处理可能的距离矩阵
	bfs(n - 1, m - 1);

	for(int i = 1 ; i<= n_ ;++i)
		for (int j = 1; j <= m_; ++j)
		{
			int ij = i * m_ + j+1;
			int i1 = i - 1, j1 = j - 1;
			int ij1 = i1 * m_ + j1+1;
			d[ij] += d[ij1];
		}

	//for (int i = 0; i < 2 * n - 1; ++i)
	//{
	//	for (int j = 0; j < 2 * m - 1; ++j)
	//	{
	//		int xy = i * m + j;
	//		cout << d[xy] << ' ';
	//	}
	//	cout << endl;
	//}


	return 0;
}


//const int N = 1e6+10;
//int dx[] = {-1,-1,0,1,1,1,0,-1};
//int dy[] = {0,1,1,1,0,-1,-1,-1};
//int n,m;
//int aa[N];//Ӱ���� 
//int d[N];//������ 
//int st[N];//���ʱ�� 
//int res[N];
//
//void bfs(int i,int j)
//{
//	//��ʼ�� 
//	queue<PII> q;
//	q.push({i,j});
//	int ij = i * m +j;
//	memset(st,0,sizeof(int)*n*m);
//	memset(d,0,sizeof(int)*n*m);
//	int sum = 0;
//	st[ij] = 1;
//	
//	while(q.size())
//	{
//		PII t = q.front();
//		q.pop();
//		int x = t.first,y = t.second;
//		int xy = x*m +y;
//		for(int k= 0 ; k < 8 ; ++k)
//		{
//			int a = x +dx[k],b = y + dy[k];
//			int ab = a*m +b;
//			//Խ���� 
//			if(a < 0 || a >= n || b < 0 || b >=m)continue;
//			//���ʼ�� 
//			if(st[ab])continue;
//			st[ab] =1; 
//			d[ab] = d[xy]+1;
//			q.push({a,b});
//		}
//				
//	}
//	
//	for(int i=0 ;i < n; ++i)
//	{
//		for(int j= 0 ; j < m ; ++j)
//		{
//			int ij = i*m +j;
//			cout<<d[ij]<<' ';
//			sum+= d[ij];
//		}
////		cout<<endl;
//	}
//	cout<< endl;
//	cout<<sum;
//	cout<< endl;
////	cout<<sum*aa[ij]<<endl; 
////	res[ij] = sum*aa[ij];
//	
//	res[ij] = sum;
//}
//
//
//int main()
//{
//	cin>>n>>m;
////	for(int i= 0 ;i < n ; ++i)
////	{
////		for(int j=0 ;  j< m ; ++j)
////		{
////			
////			int xy = i*m+j;
////			cin>>aa[xy]; 
////		}
////	}
//	
//	for(int i = 0 ; i< n ; ++i)
//		for(int j= 0 ; j < m ; ++j)
//		{
//			bfs(i,j);
//		}
//	
//	
//	
//	
//	for(int i = 0 ; i< n ; ++i)
//	{
//		for(int j= 0 ; j < m ; ++j)
//		{
//			int ij = i*m +j ;
//			cout<<res[ij];
//			if(j != m-1)
//			cout<<' ';
//		}
//		cout<<endl;
//	}
//	
//	
//	return 0;
//}


////10
//const int N = 5e4+10;
//vector<vector<PII>> res;
//vector<PII> path;
//int n,x,y;
//int a[N][5];
//void dfs()
//{
//	
//}
//
//int main()
//{
//	cin>>n;
//	for(int i=1 ; i <= n ; ++i)
//	{
//		cin>>x>>y;
//		a[x][y] = 1;
//	}
//}
//	
//	
//	return 0;
//}

//8

//const int N =1010;
//int n,m,k;
//int a[N][N];
//int st[N][N];
//vector<vector<int>> res;
//
//
//
//int main()
//{
//	cin>>n>>m>>k;
//	for(int i=1 ; i <= n ; ++i)
//		for(int j =1 ;j <= m ;++j)
//		{
//			cin>>a[i][j];
//		}	
//	
////	while(k--)
////	{
////		cout<<heap.top().w<<' ';heap.pop();
////	}
//	
//
//	while(k--)
//	{
//		int bo = -0x3f3f3f3f,dx = 0,dy = 0;
//		for(int i=1 ; i <= n ; ++i)
//		for(int j =1 ;j <= m ;++j)
//		{
//			if(a[i][j] > bo && !st[i][j])
//			{
//				bo = a[i][j];
//				dx = i,dy = j;
//			}
//		}
//		
//		
//		for(int i = 1 ; i <= n; ++i)
//			st[i][dy] = 1;
//		for(int j= 1 ; j<= m ;++j)
//			st[dx][j] = 1;
//		
//		
//		
//	}
//	
//	int newn = 0,newm = 0;
//	for(int j = 1 ; j <= m ; ++j)
//		if(!st[1][j])++newm;
//	for(int i = 1 ; i <= n ; ++i)
//		if(!st[i][1])++newn;
//	
//	
//	
//	
//	for(int i=1 ; i <= n ; ++i)
//	{
//		vector<int> tmp;
//		for(int j =1 ;j <= m ;++j)
//		{
//			if(!st[i][j])
//			{				
//				tmp.push_back(a[i][j]);
//			}
//		}
//		res.push_back(tmp);
//
//	}
//	
//	for(int i= 0 ;i <res.size(); ++i)
//	{
//		for(int j = 0 ; j < res[i].size();++j)
//		{
//			cout<<res[i][j];
//			if(j != res[i].size()-1)
//			cout<<' ';
//		}
//		if(res[i].size())
//		cout<<endl;
//	}
//	
//	
//	
//	
//	return 0;
//}



////7
//
//int n;
//int res, j;
//bool check(int l)
//{
//	LL sum = 0;
//	int begin = 1;
//	while(sum < n)
//	{
//		sum+=pow(begin,l);
//		begin++;
//	}
//	
//	if (sum == n)
//	{
//		j = begin;
//		return true;
//	}
//	return false;
//}
//
//int main()
//{
//	cin>>n;
//	res = 0;
//	for(int i= 31 ;i >0; --i)
//		{
//			if (check(i))
//			{
//				//枚举顺序优化
//				//从大到小找，第一次找到的就是最大
//				res = i;
//				break;
//			}
//		}
//	
//
//	
//	if(res)
//	{
//		for(int i=1 ; i <j ; ++i)
//		{
//			cout<<i<<'^'<<res;
//			if(i != j -1)
//			cout<<'+';
//		}
//	}
//	else 
//	{
//		cout<<"Impossible for "<<n<<endl;
//	}
//	
//	
//	return 0;
//}


//6.
//const int N = 1e3+10;
//vector<int> v(N*100);
//string a[N];
//int n,m;
//
//
//bool ReplaceSequence(vector<int>& oldsub,vector<int> newsub)
//{
//	auto ito = search(v.begin(), v.end(), oldsub.begin(), oldsub.end());
//	if (ito != v.end())
//	{
//		ito = v.erase(ito, ito + oldsub.size());
//		ito = v.insert(ito, newsub.begin(), newsub.end());
//		return true;
//	}
//	else
//	{
//		return false;
//	}
//}
//
//void op2()
//{
//	auto itos = v.begin(), itof = v.begin() + 1;
//	//int f, s;
//	while (itof != v.begin()+n)
//	{
//		if ((*itof + *itos) % 2 == 0)
//		{
//			itof = v.insert(itof, ((*itof + *itos) / 2));
//			itof++;
//			n++;
//		}
//		itos = itof;
//		itof++;
//		//f = itof - v.begin(), s = itos - v.begin();
//	}
//}
//
//
//int main()
//{
//	cin>>n>>m;
//	for(int i= 0 ;i < n ; ++i)
//	cin>>v[i];
//	
//	int op;
//	while(m--)
//	{
//		cin>>op;
//		if(op == 1)
//		{
//			int oldsubn, newsubn, tmp;
//			vector<int> oldsub, newsub;
//			cin >> oldsubn;
//			for(int i= 1 ; i<= oldsubn ; ++i)
//			{
//				cin >> tmp;
//				oldsub.push_back(tmp);
//			}
//			cin >> newsubn;
//			for(int i = 1 ; i <= newsubn ; ++i)
//			{
//				cin >> tmp;
//				newsub.push_back(tmp);
//			}
//
//			if (ReplaceSequence(oldsub, newsub))n += newsubn - oldsubn;
//		}
//		else if(op == 2) 
//		{
//			op2();
//		}
//		else if(op == 3)
//		{
//			int l, r;
//			cin >> l >> r;
//			reverse(v.begin() + l-1, v.begin() + r);
//		}
//		//cout << "n == " << n << ' ';
//		//cout << "op " << ++cnt << "-> ";
//		//for (int i = 0; i < n; ++i)
//		//{
//		//	cout << v[i] << ' ';
//		//}
//		//cout << endl;
//	}
//
//	for (int i = 0; i < n; ++i)
//	{
//		cout << v[i] << ' ';
//	}
//	cout << endl;
//
//	
//	return 0;
//}



////5.
//int cnt[30];
//int w[30];
//string str;
//int main()
//{
//	cin>>str;
//	
//	for(int i= 0 ;i < 26; ++i)
//		cin>>w[i];
//	
//	str =" "+str;
//	int n = str.size();
//	int res = 0;
//	for(int i = 1 ; i < n ; ++i)
//	{
//		int ch = str[i]-'a';
//		cnt[ch]++;
//		res+= w[ch];
//	}
//	
//	for(int i =0 ; i < 26 ; ++i)
//	{
//		cout<<cnt[i];
//		if(i != 25)
//		cout<<' ';
//	}
//	cout<<endl;
//	cout<<res;
//	
//	return 0;
//}



////4.
//int main()
//{
//	int n;
//	cin>>n;
//	
//	for(int i = 31 ; i>=0 ; --i)
//	{
//		int j = (1<<i);
//		if(j & n)
//		{
//			cout<<j<<endl;
//			break;
//		}
//	}
//	
//	
//	
//	return 0;
//}





//bool ishot1(int T)
//{
//	return T>=35; 
//}
//bool ishot2(int t)
//{
//	return t>=33;
//}
////3.
//int main()
//{
//	int S,T,t;
//	cin>>T>>S>>t;
//	if(ishot1(T) && ishot2(t) && S)
//	{
//		cout<<"Bu Tie"<<endl;
//		cout<<T<<endl;
//	}
//	else if(ishot1(T) && ishot2(t) && !S)
//	{
//		cout<<"Shi Nei"<<endl;
//		cout<<T<<endl;
//	}
//	else if((!ishot1(T) || !ishot2(t) )&& S)
//	{
//		cout<<"Bu Re"<<endl;
//		cout<<t<<endl;
//	}
//	else if((!ishot1(T) || !ishot2(t) )&& !S)
//	{
//		cout<<"Shu Shi"<<endl;
//		cout<<t<<endl;
//	}
//	
//	return 0;
//}


////2.
//int main()
//{
//	int a,b,c;
//	cin>>a>>b>>c;
//	cout<<a+b+c<<endl;
//	
//	reutrn 0;
//}
//
//
////1.
//int main() {
//	cout<<"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."<<endl;
//	return 0;
//}
